//
// Created by jack on 20-3-12.
//

#ifndef SBCTEST_SBCLOG_H
#define SBCTEST_SBCLOG_H

#include <android/log.h>

#define SBC_LOG_LEVEL_VERBOSE  1
#define SBC_LOG_LEVEL_DEBUG    2
#define SBC_LOG_LEVEL_INFO     3
#define SBC_LOG_LEVEL_WARNING  4
#define SBC_LOG_LEVEL_ERROR    5
#define SBC_LOG_LEVEL_FATAL    6
#define SBC_LOG_LEVEL_SILENT   7

#ifndef SBC_LOG_TAG
#define SBC_LOG_TAG    __FILE__
#endif

#ifndef SBC_LOG_LEVEL
#define SBC_LOG_LEVEL SBC_LOG_LEVEL_ERROR
#endif

#define SBC_LOG_NOOP (void)0

#define SBC_LOG(level, fmt, ...) \
    __android_log_print(level, SBC_LOG_TAG, "(%s:%u): " fmt, \
        __FILE__, __LINE__, ##__VA_ARGS__)

#if SBC_LOG_LEVEL_VERBOSE >= SBC_LOG_LEVEL
#define SBC_LOG_V(fmt, ...) \
    SBC_LOG(ANDROID_LOG_VERBOSE, fmt, ##__VA_ARGS__)
#else
#define SBC_LOG_V(...) SBC_LOG_NOOP
#endif

#if SBC_LOG_LEVEL_INFO >= SBC_LOG_LEVEL
#define SBC_LOG_I(fmt, ...) \
    SBC_LOG(ANDROID_LOG_INFO, fmt, ##__VA_ARGS__)
#else
#define SBC_LOG_I(...) SBC_LOG_NOOP
#endif

#if SBC_LOG_LEVEL_WARNING >= SBC_LOG_LEVEL
#define SBC_LOG_W(fmt, ...) \
    SBC_LOG(ANDROID_LOG_WARN, fmt, ##__VA_ARGS__)
#else
#define SBC_LOG_W(...) SBC_LOG_NOOP
#endif

#if SBC_LOG_LEVEL_ERROR >= SBC_LOG_LEVEL
#define SBC_LOG_E(fmt, ...) \
    SBC_LOG(ANDROID_LOG_ERROR, fmt, ##__VA_ARGS__)
#else
#define SBC_LOG_E(...) SBC_LOG_NOOP
#endif

#if SBC_LOG_LEVEL_FATAL >= SBC_LOG_LEVEL
#define SBC_LOG_F(fmt, ...) \
    SBC_LOG(ANDROID_LOG_FATAL, fmt, ##__VA_ARGS__)
#else
#define SBC_LOG_F(...) SBC_LOG_NOOP
#endif

#if SBC_LOG_LEVEL_FATAL >= SBC_LOG_LEVEL
#define SBC_LOG_ASSERT(expression, fmt, ...) \
    if (!(expression)) \
    { \
        __android_log_assert(#expression, SBC_LOG_TAG, \
            fmt, ##__VA_ARGS__); \
    }
#else
#define SBC_LOG_ASSERT(...) SBC_LOG_NOOP
#endif


#endif //SBCTEST_SBCLOG_H
